#include "DynamicArrayl.h"
#include <iostream>
    // DynamicArray a;
    // for (size_t i = 0; i < 20; i++)
    // {
    //     a.InsertTail(i + 1);
    // }
    // for (size_t i = 0; i < 20; i++)
    // {
    //     a.InsertHead(i + 1);
    // }
    // a.Sort();
    // a.Duplicate();
    // a.Show();

//     DynamicArray a1;
//     for (int i = 1; i <=10; i+=2)
//     {   
//         a1.InsertTail(i);
//     }
//     DynamicArray a2;
//     for (int i = 2; i <=10; i+=2)
//     {   
//         a2.InsertTail(i);
//     }
    
//    a1.Merge(a2).Show();
// DynamicArray a1;
// DynamicArray a2;
// a1.InsertTail(1);
// a1.InsertTail(2);
// a1.InsertTail(3);
// a1.InsertTail(4);

// a2.InsertTail(3);
// a2.InsertTail(4);
// std::cout<<a1.IscntnsChild(a2);
class Student
{
public:
Student(std::string name,int age,int score):name(name),age(age),score(score){}
~Student(){};
void show()
{
std::cout<<"score:"<<score<<"  name:"<<name<<"  age:"<<age<<std::endl;
}
int ReturnScore()
{
    return score;
}

private:
    std::string name;
    int     age;
    int    score;
};
void freePtr (ElementType a)
{
    Student*b=(Student*)a;
    b->~Student();
}
void printPtr(ElementType a)
{
    Student*b=(Student*)a;
    b->show();

}
int equalPtr(ElementType a,ElementType b)
{
    Student*c=(Student*)a;
    Student*d=(Student*)b;
    if (c->ReturnScore()>d->ReturnScore())
    {
        return 1;
    }
    if (c->ReturnScore()<d->ReturnScore())
    {
        return 0;
    }
        return 2;
    
    
}




int main()
{
    Student a("张三",20,98);
    Student b("李四",21,99);
    Student c("王五",22,101);
    Student d("赵六",23,100);
    Student e("张绍文",25,90);
    DynamicArray tech1(freePtr, printPtr,equalPtr);
    DynamicArray tech2(freePtr, printPtr,equalPtr);

    tech1.InsertTail((void*)&a);
    tech1.InsertTail((void*)&b);
    tech1.InsertTail((void*)&c);
    // tech1.InsertTail((void*)&d);
    
    // tech1.InsertTail((void*)&d);


    tech2.InsertTail((void*)&a);
    tech2.InsertTail((void*)&b);
     //tech2.InsertTail((void*)&c);
    //tech2.InsertTail((void*)&e);

    tech1.Sort();
    tech2.Sort();
    //tech1.InsertHead((void*)&b);
    //tech1.InsertIndex(1,(void*)&b);
    //tech1.RemoveByindex(1);
    //tech1.RemoveByElement((void*)&b);
    // tech1.FindByElement((void*)&b).Show();
    // (*(Student**)tech1.FindByIndex(3))->show();
    // tech1.UpdateByElement((void*)&b,(void*)&c);
    // tech1.UpdateByIndex(1,(void*)&c);
    // tech1.InsertTail((void*)&d);
    // tech1.Duplicate();
    // tech1.Merge(tech2).Show();

    //tech1.FindUn(tech2).Show();
    // tech1.Finddefe(tech2).Show();
    //std::cout<<(tech1==tech2);
    //std::cout<<tech1.IsChild(tech2);
    

    // tech1.Show();
    







}








